﻿using System;
using System.Threading;

namespace Aufgaben;

/*
 *  Klasse PKW
 *      mit einer TankfüllstandLeuchte,
 *      einem öffentlichen Attribut vom Typ TankfüllstandBeobachter als Event,
 *      einem privaten tankfüllstand und einer öffentlichen addTankfüllstand-Methode,
 *          die den Tankfüllstand erhöhen kann und, wenn der Tankfüllstand größer gleich 15 ist, die Farbe der Leuchte auf Grün setzt.
 *      einen Konstruktor, der den Tankfüllstand initialisiert,
 *      eine void-Methode Fahren(), die in einer Schleife "Brumm..." ausgibt und den Tankfüllstand um 1 reduziert, solange der Tankfüllstand größer 0 ist
 *          und weiterhin, wenn der Tankfüllstand kleiner 15 ist, die Leuchte auf Gelb stellt und das TankfüllstandBeobachter-Event auslöst,
 *          und wenn der Tankfüllstand kleiner 10 ist, die Leuchte auf Rot stellt und das TankfüllstandBeobachter-Event auslöst.
 */

public class Pkw
{
    private TankfüllstandLeuchte leuchte;
    private int tankfüllstand;

    public event TankfüllstandBeobachter? TankfüllstandBeobachter;

    public TankfüllstandLeuchte Leuchte
    {
        get => leuchte;
        private set
        {
            leuchte = value;
            TankfüllstandBeobachter?.Invoke(this);
        }
    }

    public void AddTankfüllstand(int menge)
    {
        tankfüllstand = tankfüllstand + menge;
        Leuchte = tankfüllstand >= 15 ? TankfüllstandLeuchte.Grün 
            : tankfüllstand >= 10 ? TankfüllstandLeuchte.Gelb 
            : TankfüllstandLeuchte.Rot;

        /*if (tankfüllstand >= 15)
            Leuchte = TankfüllstandLeuchte.Grün;
        else if (tankfüllstand >= 10)
            Leuchte = TankfüllstandLeuchte.Gelb;*/
    }

    public Pkw(int tankfüllstand)
    {
        AddTankfüllstand(tankfüllstand);
    }

    public void Fahren()
    {
        while (tankfüllstand > 0)
        {
            Console.WriteLine("Brumm...");
            AddTankfüllstand(-1);
            Thread.Sleep(500);
        }
    }
}